#include<iostream>
#include<stdbool.h>


const int StackSize=10;
class ArrayStack
{
public:
     ArrayStack():len(0){};
     //入栈
     void Push(const int &element)
     {
        if(len==StackSize)
        {
            std::cout<<"栈空间满"<<std::endl;
            return;
        }
        a[len++]=element;
     }
     //出栈
     void Pop()
     {
        if(len==0)
        {
            std::cout<<"栈空间为0!\n";
            return;
        }
        len--;
     }
     //获取栈顶元素
     int* GetTop()
     {
           if(len==0)
        {
            std::cout<<"栈空间为0!\n";
            return nullptr;
        }
        return &a[len-1];

     }

     //判断栈是否为空
     bool IsEmpty()
    {
        return len==0;
    }



private:
    int a[StackSize];
    int len;//栈顶指针
};


int main()
{
    //ArrayStack  s;
    // for(int i=0;i<20;i++)
    // {
    //     s.Push(i+1);
    // }
    // while(s.IsEmpty()==false)
    // {
    //     std::cout<<*s.GetTop()<<" ";
    //     s.Pop();
    // }


    //进制转换器
    int num=0;//要被转换的数据
    int n; //进制
    std::cin>>num>>n;
    ArrayStack  s;
    while(num!=0)
    {
        s.Push(num % n);
        num/=n;
    }
        while(s.IsEmpty()==false)
    {
         
               int value=*s.GetTop();
               if(value>9)
                    printf("%c",value-10+'a');
                else    
                    std::cout<<value;
               s.Pop();     
     
    }
    std::cout<<std::endl;
    return 0;
}